# 基本引用 通过 Document 可以创建一个文档对象
from docx import Document, document
from docx.enum.style import WD_STYLE_TYPE
from docx.text.paragraph import Paragraph
from docx import Document   #用来建立一个word对象
from docx.shared import Pt  #用来设置字体的大小
from docx.enum.text import WD_ALIGN_PARAGRAPH  #设置对其方式
from docx.shared import Inches
from docx.oxml.ns import qn  #设置字体
from docx.shared import RGBColor  #设置字体的颜色

from docx.enum.style import WD_STYLE_TYPE
# # 子对象引用，docx.shared 中包含诸如"字号"，"颜色"，"行间距"等常用模块
# # 非必要，建议只在需要的时候进行引用
# from docx.shared import Length, Pt, RGBColor


# # 创建文档对象
# doc = Document('测试.docx')
#
#
# paragraph1 = doc.add_paragraph("这是第1个段落")
# paragraph2 = doc.add_paragraph("这是第2个段落")
#
# # 在paragraph2这个段落的前面插入一个段落
# paragraph2.insert_paragraph_before("额外插入的段落文字")
#
# # 读取打印
# # 遍历文档的每一个段落
# for para in doc.paragraphs:
#     print(para.text)
# doc.save("demo.docx")














# # 直接添加标题 和 设置段落
# # 如果报错 KeyError: "no style with name 'Heading 1'" 那就打开这个文档，将这些标题样式使用一遍，或者新建
# # doc.add_heading(text="这是标题", level=0)           # 标题等级(level)默认是1，对应“标题1”，如果设置为0，对应“标题”
# title1 = doc.add_heading(text="这是一级标题", level=1)
# title1.alignment = WD_ALIGN_PARAGRAPH.CENTER            # 设置为居中对齐
# title1.paragraph_format.space_before = Pt(0)            # 设置段前 0 磅
# title1.paragraph_format.space_after = Pt(0)             # 设置段后 0 磅
# title1.paragraph_format.line_spacing = 1.5              # 设置行间距为 1.5
# title1.paragraph_format.left_indent = Inches(4)         # 设置左缩进 1英寸
# title1.paragraph_format.right_indent = Inches(0)        # 设置右缩进 0.5 英寸
#
#
#
# # 添加标题为空，然后使用run向标题里插入文字，（既可以设置段落 也可以 设置字体格式）
# # 添加一个三级标题，内容为空
# para_heading = doc.add_heading('',level=3)
# para_heading.alignment = WD_ALIGN_PARAGRAPH.CENTER            # 设置为居中对齐
# para_heading.paragraph_format.line_spacing = 1.5              # 设置行间距为 1.5
#
# # 然后使用run模块对该标题添加文字，处理该文字的字体、大小、颜色等
# run = para_heading.add_run(u"前言")
# run.font.name = u'宋体'
# run._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')        # 设置为宋体，和上边的一起使用
# run.font.size = Pt(12)        # 设置1级标题文字的大小为“小四” 为12磅
# run.font.color.rgb = RGBColor(255,0,0)        # 设置颜色为红色
#
#
#
#
#
# # 设置全局的 正文和标题 的 字体和段落格式
# doc.styles["Normal"].font.name = u"宋体"                      # 设置全局正文字体
# doc.styles["Normal"]._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
# doc.styles["Normal"].font.size = Pt(29)                      # 设置正文全局大小为29
# doc.styles["Normal"].font.color.rgb = RGBColor(255, 0, 0) # 设置正文全局颜色为红色
#
# doc.styles["Heading 2"].font.size = Pt(29)                    # 设置全局二级标题的字体大小为29
# doc.styles["Heading 2"].font.name = u'微软雅黑'                 # 设置全局的二级标题的字体
# doc.styles["Heading 2"]._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑')
# doc.styles["Heading 2"].font.color.rgb = RGBColor(100, 0, 0) # 设置二级标题全局颜色
#
# # 添加正文
# p = doc.add_paragraph()
# p.alignment = WD_ALIGN_PARAGRAPH.CENTER            # 设置为居中对齐
# r = p.add_run("测试正文样式")   # 这个段落使用的是Normal的样式
#
# # 添加标题
# para_heading = doc.add_heading('',level=2)    # 添加一个二级标题，标题也相当于一个段落
# run = para_heading.add_run(u"测试标题样式")           # 这个使用的是"Heading 2" 的样式
#
# doc.save('demo.docx')



# doc_path = '测试.docx'
# doc = Document(doc_path)
# typos_paragraph_list = ['树木丛声，', '百草丰冒。', '幸甚至哉！割以咏志。']
# typos_list = ['声', '冒', '割']
# good_char = ['生', '茂', '歌']
# good_char_list = []
# # 遍历文档中的每个段落
# for i, v_parag in enumerate(doc.paragraphs):
#     # 遍历typos_paragraph中的每个错别字字符串
#     for j, v_typos_parag in enumerate(typos_paragraph_list):
#
#         # 使用find()方法查找错别字字符串在段落中的位置
#         position = v_parag.text.find(v_typos_parag)
#
#         # 如果在这个段落里找到了错别字字符串，就将错别字字符串中的错别字替换成正确的
#         if position != -1:
#             good_char_list.append(v_typos_parag.replace(typos_list[j], good_char[j]))
#             # 遍历段落中的每个文本运行
#             for run in v_parag.runs:
#                 if typos_list[j] in run.text:  # 判断，找到这个错别字
#                     run.font.color.rgb = RGBColor(255, 0, 0)  # 设置字体颜色为红色、
#                     run.text = good_char[j]
#
# doc.save('demo.docx')


